package com.jhy.suixianglu.daima20221210;

/**
 * 滑动窗口
 * 给定一个含有n个正整数的数组和一个正整数 target 。
 * 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组
 * [numsl, numsl+1, ..., numsr-1, numsr] ，
 * 并返回其长度。如果不存在符合条件的子数组，返回 0 。
 */
public class SmallestLength {
    public int minSubArrayLen(int target, int[] nums) {
        // 定义一个初始上坐标
        int i = 0;
        // 定义一个集合
        int sum = 0;
        int res = Integer.MAX_VALUE;
        // 滑动窗口的长度
        int length = 0;
        for (int j = 0; j < nums.length; j++) {
            sum += nums[j];
            // 这里应该是while if的话只能判断一次
            while (sum >= target) {
                // 记录当前滑动窗口的值
                length = j - i + 1;
                // 当前的滑动窗口的值与之前的做比较 取最小值
                res = Math.min(length, res);
                // 然后将初始上坐标的值减去 然后i++;
                sum -= nums[i++];
            }
        }
        return res == Integer.MAX_VALUE ? 0 : res;
    }
}
